;------------------------------------------------ ; Eprom 1390 ; Con modifica per evitare che il boot parta subito a causa di un tasto ancora premuto sulla tastiera ; alfanumerica quando si lancia questo firmware .org 0f000h lf400: jp lf7f0 lf403: .byte "BOOTSTRAPPING VERSION 1.0" lf41c: .byte "INSERT NE-DOS-DISK " .byte "AT DRIVE 0 " .byte "THEN TYPE ", 22h, "SPACE", 22h lf452: .byte "NO NE-DOS-SYSTEM", 2ah lf463: ld a,e ; legge un settore della traccia/settore indicato da DE e lo mette in memoria a partire da HL out (0d2h),a ld a,d out (0d7h),a ld a,1ah out (0d0h),a ex (sp),hl ex (sp),hl lf46f: in a,(0d0h) rrca lf472: jr c,lf46f ; (-5) ld a,88h out (0d0h),a push bc pop bc jr lf47f ; (3) lf47c: rrca jr nc,lf48b ; (12) lf47f: in a,(0d0h) bit 1,a jr z,lf47c ; (-9) in a,(0d7h) ld (hl),a inc hl jr lf47f ; (-12) lf48b: in a,(0d0h) nop nop nop nop and 5ch ret z ld a,0d0h ; se c'è un errore invia un force interrupt out (0d0h),a ret nop lf49a: ld bc,0010h ; visualizza l'errore NO NE-DOS ld de,0ec89h ld hl,lf452 ldir ld hl,0ed02h ld de,0ed03h ld (hl),20h ld bc,0036h ldir jr lf4cf ; (27) lf4b4: ld sp,41fch ld hl,0ec00h ld de,0ec01h ld bc,01ffh ld (hl),20h ldir ld hl,lf403 ld de,0ec03h ld bc,0019h ldir lf4cf: xor a out (0d6h),a out (0d0h),a lf4d4: ex (sp),hl ex (sp),hl in a,(0d0h) bit 1,a jr z,lf4e2 ; (6) ld a,0d0h out (0d0h),a jr lf4d4 ; (-14) lf4e2: ld hl,lf41c ld de,0ed02h ld bc,0036h ldir lf4ed: in a,(0eah) bit 7,a ;------------------------------------- ; Modifiche per evitare che parta subito a causa del tasto ; ancora premuto sulla tastiera ; ;------------------------------------- ; jr z,lf4ed ; (-6) ;------------------------------------- jr nz,lf4ed aaaaa: in a,(0eah) bit 7,a jr z,aaaaa ;------------------------------------- ; Fine modifiche ;------------------------------------- ld hl,0ec88h ld de,0ec89h ld bc,0010h ld (hl),20h ldir ld hl,0000h ; imposta l'indirizzo di memoria iniziale in cui leggere i dati del floppy (0000) ld (7002h),hl ld hl,1500h ; imposta la traccia/settore iniziale da leggere (traccia 15h settore 00h) ld (7000h),hl ld a,01h ; accende il motore del drive 0 out (0d6h),a ld a,0bh ; invia due volte il comando di restore per posizionare la testina sulla traccia 0 out (0d0h),a ex (sp),hl ex (sp),hl out (0d0h),a ex (sp),hl ex (sp),hl lf51a: in a,(0d0h) ; attende che il "busy" si disattivi bit 0,a jr nz,lf51a ; (-6) lf520: ld de,(7000h) ; da qui comincia a caricare il sistema operativo ld hl,(7002h) ; legge tutte le tracce/settori a partire da quella indicata da DE e le mette in memoria a partire da HL, e termina quando trova il quart'ultimo byte del settore <> 01 ld bc,00d7h ; questa assegnazione di BC non serve. E' un refuso? call lf463 ld a,(7000h) inc a cp 0ah jr nz,lf53d ; (8) ld a,(7001h) inc a ld (7001h),a xor a lf53d: ld (7000h),a dec hl ; l'ultimo e il penultimo byte del settore indicano l'indirizzo di memoria iniziale in cui mettere il settore successivo ld a,(hl) ld (7003h),a dec hl ld a,(hl) ld (7002h),a dec hl ; il terz'ultimo byte del settore deve essere 00h, altrimenti visualizza l'errore NO NE-DOS ld a,(hl) cp 00h jp nz,lf49a dec hl ; se il quart'ultimo byte è 01h continua a leggere il settore successivo (o la traccia successiva, settore 0), altrimenti salta al dos. Il drive resta acceso ld a,(hl) cp 01h jp nz,0000h ; salta al NE-DOS jr lf520 ; (-58) .org 0f3f0h lf7f0: in a,(0d6h) nop nop nop jp lf4b4 ;------------------------------------------------------ .org 0f400h .end